package cn.bonoon.kernel.annotations.services;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * 定义查询列
 * 
 * <pre>
 * 1.当需要查询表中的某些属性，需要使用此注解；当查询整个表时，不需要添加此注解。
 * e.g.
 * @Select("x.id, x.name, x.creatorName") // 正确。ql = "select x.id, x.name, x.creatorName from PlaceEntity x where x.id=?";
 * @From(PlaceEntity.class)
 * @Where("x.id=?")
 * Object[] getArray_Object(Long arg1);
 * 
 * @Select("x") // 错误。此行是多余的，应该省略。去掉此行，默认就是查整个表 ql = "select x from PlaceEntity x where x.id=?";
 * @Where("x.id=?")
 * PlaceEntity getObject(Long arg1);
 * 
 * 2.当查找一个属性时，应该返回 Object、long、Long或其它数据类型，返回数组将报错。
 * e.g.
 * @Select("x.id")      // 错误，只查找 id 一个属性，不可以返回数组。
 * @From(PlaceEntity.class)
 * @Where("x.id=?")
 * Object[] getArray_Object(Long arg1);
 * 
 * @Select("x.id")      // 正确
 * @From(PlaceEntity.class)
 * @Where("x.id=?")
 * Object getArray_Object(Long arg1);
 * 
 * @Select("x.id")      // 正确
 * @From(PlaceEntity.class)
 * @Where("x.id=?")
 * Long getArray_Object(Long arg1);
 * 
 * 3.当使用 {@link AutoTransform} 注解时，不需要添加此注解（添加无效）。
 * </pre>
 * 
 * @author ocean~
 */
@Target(ElementType.METHOD)
@Retention(RUNTIME)
public @interface Select {

	/**
	 * 查询列 (e.g. "x.id, x.name, x.creatorName")
	 */
	String value();

}
